/**
 *	@file	fld_safari.h
 *	@brief	フィールド　サファリ処理
 *	@author	Miyuki Iwasawa
 *	@date	08.10.24
 */

#ifndef __H_FLD_SAFARI_H__
#define __H_FLD_SAFARI_H__

#include "application/safari_l.h"

/**
 *	@brief	サファリのゾーンかどうかチェック
 */
extern BOOL SafariField_ZoneCheck(int zoneID);

/**
 *	@brief	プレイヤーが現在いるブロックIDを取得
 */
extern int SafariField_GetBlockIdFromXZ(int gx,int gz);

/**
 *	@brief	プレイヤーが現在いるブロックIDを取得
 */
extern int SafariField_GetNowBlockID(FIELDSYS_WORK* fsys);

/**
 *	@brief	サファリのアトリビュートチェックが有効か？
 */
extern BOOL SafariAttr_IsEnable(FIELDSYS_WORK* fsys);

/**
 *	@brief	サファリの地上オブジェクトをおけるアトリビュートかチェック
 */
extern BOOL SafariAttr_IsGroundObjPlace(MATR matr,BOOL hit);

/**
 *	@brief	サファリの水上オブジェクトをおけるアトリビュートかチェック
 *
 *	＊BOOL SafariAttr_IsEnable(FIELDSYS_WORK* fsys)がTRUEのときでないと
 *	　このチェックも無効
 */
extern BOOL SafariAttr_IsWaterObjPlace(MATR matr,BOOL hit);

/*
 *	@brief	サファリのエンカウントテーブルをアロケーションして取得する
 *
 *	＊呼び出し側が利用後に解放すること！
 */
//extern ENC_COMMON_DATA* FieldSafari_AllocEncountTbl(
//	SAFARI_LAYOUT* layout,SAFARI_BLOCK_ID block_id,SAFARI_ENC_MODE mode,int time_zone,int heapID);

/**
 *	@brief	サファリオブジェレイアウトツール呼び出しデータセット
 */
extern SAFARI_LTPARAM* FieldSafariObjLayout_CallDataSet(FIELDSYS_WORK* fsys,int heapID);

/*
 *	@brief	サファリのオブジェクトを置けるかどうかスペースなどのチェック
 *
 *	0が返れば、問題なくOBJを置け
 */
extern int FieldSafari_ObjPlaceCheck(FIELDSYS_WORK* fsys);

/**
 *	@brief	話しかけた位置にあるサファリOBJのデータindexを特定
 */
extern SAFARI_OBJ_ID FieldSafari_SearchTalkObj(FIELDSYS_WORK* fsys,u16* data_idx);

#endif	//__H_FLD_SAFARI_H__
